package com.imooc.coupon.executor;

import com.imooc.coupon.constant.RuleFlag;
import com.imooc.coupon.support.vo.SettlementInfo;

/**
 * 优惠券结算规则执行器接口定义
 *
 * Created By TINY
 * Create Time 2020/2/12
 **/
public interface RuleExecutor {

    /**
     * 优惠券结算规则类型标记
     *
     * @return {@link RuleFlag} 优惠券结算规则标记
     */
    RuleFlag supports();

    /**
     * 按优惠券规则进行结算，如果用户传入的结算信息对象 {@link SettlementInfo}
     * 不合法，返回一个无效的 {@link SettlementInfo}
     *
     * @param settlementInfo {@link SettlementInfo} 结算信息对象
     * @return {@link SettlementInfo} 按规则计算后的结算信息对象
     */
    SettlementInfo computeRule(SettlementInfo settlementInfo);
}
